package com.yc.framework.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.retry.annotation.EnableRetry;
import org.springframework.retry.backoff.ExponentialBackOffPolicy;
import org.springframework.retry.policy.SimpleRetryPolicy;
import org.springframework.retry.support.RetryTemplate;


/**
 * @Author YanChen
 * @Date 2025/4/17 22:35
 **/
@Configuration
@EnableRetry
public class RetryConfig {

    /**
     * 配置重试模板
     */
    @Bean
    public RetryTemplate retryTemplate() {
        // 创建重试策略
        SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
        retryPolicy.setMaxAttempts(3);

        // 创建回退策略（指数回退）
        ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy();
        backOffPolicy.setInitialInterval(100);  // 初始等待时间（毫秒）
        backOffPolicy.setMultiplier(2);         // 等待时间倍数
        backOffPolicy.setMaxInterval(1000);     // 最大等待时间（毫秒）

        // 创建重试模板并应用策略
        RetryTemplate template = new RetryTemplate();
        template.setRetryPolicy(retryPolicy);
        template.setBackOffPolicy(backOffPolicy);

        return template;
    }
}
